﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using wsUsuarioSOAP.Dominio;
using NHibernate;
using System.Data.SqlClient;

namespace wsUsuarioSOAP.Persistencia
{
    public class UsuarioDAO 
    {
        public Usuario Crear(Usuario UsuarioACrear)
        {
            Usuario UsuarioCreada = null;
            string sql = "INSERT INTO t_Usuario VALUES (@dni, @nombre, @email, @password, @mensaje, @idRol)";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@dni", UsuarioACrear.dni));
                    com.Parameters.Add(new SqlParameter("@nombre", UsuarioACrear.nombre));
                    com.Parameters.Add(new SqlParameter("@email", UsuarioACrear.email));
                    com.Parameters.Add(new SqlParameter("@password", UsuarioACrear.password));
                    com.Parameters.Add(new SqlParameter("@mensaje", UsuarioACrear.mensaje));
                    com.Parameters.Add(new SqlParameter("@idRol", UsuarioACrear.idRol));
                    com.ExecuteNonQuery();
                }
            }

            UsuarioCreada = ObtenerDNI(UsuarioACrear.dni);
            return UsuarioCreada;
        }

        public Usuario Actualizar(Usuario UsuarioACrear)
        {
            Usuario UsuarioCreada = null;
            string sql = "UPDATE t_Usuario SET dni = @dni, nombre = @nombre, email = @email, password = @password, mensaje = @mensaje, idRol = @idRol WHERE id = @id";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@id", UsuarioACrear.id));
                    com.Parameters.Add(new SqlParameter("@dni", UsuarioACrear.dni));
                    com.Parameters.Add(new SqlParameter("@nombre", UsuarioACrear.nombre));
                    com.Parameters.Add(new SqlParameter("@email", UsuarioACrear.email));
                    com.Parameters.Add(new SqlParameter("@password", UsuarioACrear.password));
                    com.Parameters.Add(new SqlParameter("@mensaje", UsuarioACrear.mensaje));
                    com.Parameters.Add(new SqlParameter("@idRol", UsuarioACrear.idRol));
                    com.ExecuteNonQuery();
                }
            }

            UsuarioCreada = Obtener(UsuarioACrear.id);

            return UsuarioCreada;
        }

        public bool ValidarExistencia(string nombre, string dni)
        {
            Usuario UsuarioEncontrada = null;
            string sql = "SELECT * FROM t_Usuario WHERE nombre = @nombre OR dni = @dni";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@dni", dni));
                    com.Parameters.Add(new SqlParameter("@nombre", nombre));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            UsuarioEncontrada = new Usuario()
                            {
                                id = (int)resultado["id"],
                                dni = (string)resultado["dni"],
                                nombre = (string)resultado["nombre"],
                                email = (string)resultado["email"],
                                password = (string)resultado["password"],
                                mensaje = (string)resultado["mensaje"],
                                idRol = (int)resultado["idRol"],
                            };

                            return true;
                        }
                    }
                }
            }

            return false;

        }

        public void Eliminar(int id)
        {
            string sql = "DELETE t_Usuario WHERE id = @id";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@id", id));
                    com.ExecuteNonQuery();
                }
            }
        }

        public Usuario Obtener(int id)
        {
            Usuario UsuarioEncontrada = null;
            string sql = "SELECT * FROM t_Usuario WHERE id = @id";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@id", id));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            UsuarioEncontrada = new Usuario()
                            {
                                id = (int)resultado["id"],
                                dni = (string)resultado["dni"],
                                nombre = (string)resultado["nombre"],
                                email = (string)resultado["email"],
                                password = (string)resultado["password"],
                                mensaje = (string)resultado["mensaje"],
                                idRol = (int)resultado["idRol"],
                            };
                        }
                    }
                }
            }
            return UsuarioEncontrada;
        }

        public Usuario ObtenerDNI(string dni)
        {
            Usuario UsuarioEncontrada = null;
            string sql = "SELECT * FROM t_Usuario WHERE dni = @dni";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@dni", dni));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            UsuarioEncontrada = new Usuario()
                            {
                                id = (int)resultado["id"],
                                dni = (string)resultado["dni"],
                                nombre = (string)resultado["nombre"],
                                email = (string)resultado["email"],
                                password = (string)resultado["password"],
                                mensaje = (string)resultado["mensaje"],
                                idRol = (int)resultado["idRol"],
                            };
                        }
                    }
                }
            }
            return UsuarioEncontrada;
        }

        public Usuario ValidarUsuario(string usuario, string password)
        {
            Usuario UsuarioEncontrada = null;
            string sql = "SELECT * FROM t_Usuario WHERE nombre = @usuario AND password = @password";
            using (SqlConnection cn = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                cn.Open();
                using (SqlCommand com = new SqlCommand(sql, cn))
                {
                    com.Parameters.Add(new SqlParameter("@usuario", usuario));
                    com.Parameters.Add(new SqlParameter("@password", password));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            UsuarioEncontrada = new Usuario()
                            {
                                id = (int)resultado["id"],
                                dni = (string)resultado["dni"],
                                nombre = (string)resultado["nombre"],
                                email = (string)resultado["email"],
                                password = (string)resultado["password"],
                                mensaje = (string)resultado["mensaje"],
                                idRol = (int)resultado["idRol"],
                            };
                        }
                    }
                }
            }
            return UsuarioEncontrada;
        }

        public List<Usuario> ListarUsuarios()
        {
            List<Usuario> UsuariosEncontradas = new List<Usuario>();
            Usuario UsuarioEncontrada = null;
            string sql = "SELECT * FROM t_Usuario";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            UsuarioEncontrada = new Usuario()
                            {
                                id = (int)resultado["id"],
                                dni = (string)resultado["dni"],
                                nombre = (string)resultado["nombre"],
                                email = (string)resultado["email"],
                                password = (string)resultado["password"],
                                mensaje = (string)resultado["mensaje"],
                                idRol = (int)resultado["idRol"],
                            };
                            UsuariosEncontradas.Add(UsuarioEncontrada);
                        }
                    }
                }
            }
            return UsuariosEncontradas;
        }
    }
}